home *** CD-ROM | disk | FTP | other *** search
/ AMIGA-CD 2 / Amiga-CD - Volume 2.iso / ungepackte_daten / 1994 / 8 / 05 / term-4.0-source.lha / ASCIIPanel.c next >
Encoding:
C/C++ Source or Header  |  1994-06-26  |  8.9 KB  |  444 lines

  1. /*
  2. **    ASCIIPanel.c
  3. **
  4. **    User interface for built-in ASCII transfer routines
  5. **
  6. **    Copyright © 1990-1994 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_BYTES=1000,GAD_INFORMATION,GAD_CHARDELAY,GAD_LINEDELAY,
  13.         GAD_PACING,GAD_QUIET_TRANSFER,GAD_SKIP,GAD_ABORT
  14.     };
  15.  
  16. STATIC struct LayoutHandle    *ASCIIHandle;
  17. STATIC struct List         MessageList;
  18. STATIC LONG             MessageCount;
  19.  
  20. STATIC STRPTR __saveds
  21. ShowTime(struct Gadget *SomeGadget,WORD Level)
  22. {
  23.     return(LocaleSeconds(Level));
  24. }
  25.  
  26. struct Window * __regargs
  27. CreateASCIIWindow(BYTE Send)
  28. {
  29.     NewList(&MessageList);
  30.  
  31.     MessageCount = 0;
  32.  
  33.     if(ASCIIHandle = LT_CreateHandleTags(Window -> WScreen,
  34.         LH_LocaleHook,    &LocaleHook,
  35.     TAG_DONE))
  36.     {
  37.         struct Window *Window;
  38.  
  39.         LT_New(ASCIIHandle,
  40.             LA_Type,    VERTICAL_KIND,
  41.         TAG_DONE);
  42.         {
  43.             LT_New(ASCIIHandle,
  44.                 LA_Type,    VERTICAL_KIND,
  45.                 LA_LabelID,    MSG_V36_0000,
  46.             TAG_DONE);
  47.             {
  48.                 LT_New(ASCIIHandle,
  49.                     LA_Type,        BOX_KIND,
  50.                     LA_ID,            GAD_BYTES,
  51.                     LABX_FirstLabel,    MSG_ASCIIPANEL_BYTES_GAD,
  52.                     LABX_LastLabel,        MSG_ASCIIPANEL_LINES_GAD,
  53.                     LABX_ReserveSpace,    TRUE,
  54.                     LA_Chars,        50,
  55.                 TAG_DONE);
  56.  
  57.                 LT_New(ASCIIHandle,
  58.                     LA_Type,        LISTVIEW_KIND,
  59.                     LA_LabelID,        MSG_ASCIIPANEL_INFORMATION_GAD,
  60.                     LA_LabelPlace,        PLACE_LEFT,
  61.                     LA_ID,            GAD_INFORMATION,
  62.                     LA_Lines,        2,
  63.                     LALV_MaxGrowX,        70,
  64.                     LALV_MaxGrowY,        10,
  65.                     LALV_CursorKey,        TRUE,
  66.                     GTLV_ReadOnly,        TRUE,
  67.                     GTLV_Labels,        &MessageList,
  68.                 TAG_DONE);
  69.  
  70.                 LT_EndGroup(ASCIIHandle);
  71.             }
  72.  
  73.             if(Send)
  74.             {
  75.                 LT_New(ASCIIHandle,
  76.                     LA_Type,        VERTICAL_KIND,
  77.                     LA_LabelID,        MSG_V36_0003,
  78.                     LAGR_LastAttributes,    TRUE,
  79.                 TAG_DONE);
  80.                 {
  81.                     LT_New(ASCIIHandle,
  82.                         LA_Type,        SLIDER_KIND,
  83.                         LA_LabelID,        MSG_ASCIIPANEL_CHAR_DELAY_GAD,
  84.                         LA_ID,            GAD_CHARDELAY,
  85.                         GTSL_Min,        0,
  86.                         GTSL_Max,        10 * 100,
  87.                         LA_WORD,        &Config -> TransferConfig -> CharDelay,
  88.                         GTSL_LevelFormat,    "%s s",
  89.                         GTSL_DispFunc,        ShowTime,
  90.                     TAG_DONE);
  91.  
  92.                     LT_New(ASCIIHandle,
  93.                         LA_Type,        SLIDER_KIND,
  94.                         LA_LabelID,        MSG_ASCIIPANEL_LINE_DELAY_GAD,
  95.                         LA_ID,            GAD_LINEDELAY,
  96.                         GTSL_Min,        0,
  97.                         GTSL_Max,        10 * 100,
  98.                         LA_WORD,        &Config -> TransferConfig -> LineDelay,
  99.                         GTSL_LevelFormat,    "%s s",
  100.                         GTSL_DispFunc,        ShowTime,
  101.                     TAG_DONE);
  102.  
  103.                     LT_New(ASCIIHandle,
  104.                         LA_Type,        CYCLE_KIND,
  105.                         LA_LabelID,        MSG_ASCIIPANEL_TEXT_PACING_GAD,
  106.                         LA_ID,            GAD_PACING,
  107.                         LA_UBYTE,        &Config -> TransferConfig -> PacingMode,
  108.                         LACY_FirstLabel,    MSG_ASCIIPANEL_DIRECT_TXT,
  109.                         LACY_LastLabel,        MSG_ASCIIPANEL_KEYDELAY_TXT,
  110.                     TAG_DONE);
  111.  
  112.                     LT_New(ASCIIHandle,
  113.                         LA_Type,        CHECKBOX_KIND,
  114.                         LA_LabelID,        MSG_ASCIIPANEL_QUIET_TRANSFER_GAD,
  115.                         LA_ID,            GAD_QUIET_TRANSFER,
  116.                         LA_BYTE,        &Config -> TransferConfig -> QuietTransfer,
  117.                     TAG_DONE);
  118.  
  119.                     LT_EndGroup(ASCIIHandle);
  120.                 }
  121.  
  122.                 LT_New(ASCIIHandle,
  123.                     LA_Type,VERTICAL_KIND,
  124.                 TAG_DONE);
  125.                 {
  126.                     LT_New(ASCIIHandle,
  127.                         LA_Type,    XBAR_KIND,
  128.                         LAXB_FullSize,    TRUE,
  129.                     TAG_DONE);
  130.     
  131.                     LT_EndGroup(ASCIIHandle);
  132.                 }
  133.  
  134.                 LT_New(ASCIIHandle,LA_Type,HORIZONTAL_KIND,
  135.                     LAGR_SameSize,    TRUE,
  136.                     LAGR_Spread,    TRUE,
  137.                 TAG_DONE);
  138.                 {
  139.                     LT_New(ASCIIHandle,
  140.                         LA_Type,    BUTTON_KIND,
  141.                         LA_LabelID,    MSG_TRANSFERPANEL_SKIP_CURRENT_FILE_GAD,
  142.                         LA_ID,        GAD_SKIP,
  143.                         LABT_ExtraFat,    TRUE,
  144.                     TAG_DONE);
  145.     
  146.                     LT_New(ASCIIHandle,
  147.                         LA_Type,    BUTTON_KIND,
  148.                         LA_LabelID,    MSG_TRANSFERPANEL_ABORT_ENTIRE_TRANSFER_GAD,
  149.                         LA_ID,        GAD_ABORT,
  150.                         LABT_ExtraFat,    TRUE,
  151.                     TAG_DONE);
  152.     
  153.                     LT_EndGroup(ASCIIHandle);
  154.                 }
  155.             }
  156.             else
  157.             {
  158.                 LT_New(ASCIIHandle,
  159.                     LA_Type,    VERTICAL_KIND,
  160.                 TAG_DONE);
  161.                 {
  162.                     LT_New(ASCIIHandle,LA_Type,XBAR_KIND,LAXB_FullSize,TRUE,TAG_DONE);
  163.  
  164.                     LT_EndGroup(ASCIIHandle);
  165.                 }
  166.  
  167.                 LT_New(ASCIIHandle,
  168.                     LA_Type,    HORIZONTAL_KIND,
  169.                 TAG_DONE);
  170.                 {
  171.                     LT_New(ASCIIHandle,
  172.                         LA_Type,    BUTTON_KIND,
  173.                         LA_LabelID,    MSG_TRANSFERPANEL_ABORT_ENTIRE_TRANSFER_GAD,
  174.                         LA_ID,        GAD_ABORT,
  175.                         LABT_ExtraFat,    TRUE,
  176.                     TAG_DONE);
  177.  
  178.                     LT_EndGroup(ASCIIHandle);
  179.                 }
  180.             }
  181.  
  182.             LT_EndGroup(ASCIIHandle);
  183.         }
  184.  
  185.         if(Window = LT_Layout(ASCIIHandle,Send ? LocaleString(MSG_ASCIIPANEL_SENDING_TXT) : LocaleString(MSG_ASCIIPANEL_RECEIVING_TXT),NULL,0,0,IDCMP_CLOSEWINDOW,0,
  186.             LAWN_HelpHook,        &GuideHook,
  187.             WA_DepthGadget,        TRUE,
  188.             WA_CloseGadget,        TRUE,
  189.             WA_DragBar,        TRUE,
  190.             WA_RMBTrap,        TRUE,
  191.         TAG_DONE))
  192.         {
  193.             ULONG    IntuiLock = LockIBase(NULL);
  194.             BYTE    Activate,Move;
  195.  
  196.             GuideContext(CONTEXT_ASCII);
  197.  
  198.             if(Config -> TerminalConfig -> AlertMode == ALERT_SCREEN || Config -> TerminalConfig -> AlertMode == ALERT_BEEP_SCREEN)
  199.                 Move = Activate = TRUE;
  200.             else
  201.             {
  202.                 if(IntuitionBase -> ActiveScreen == Window -> WScreen)
  203.                     Activate = TRUE;
  204.                 else
  205.                     Activate = FALSE;
  206.             }
  207.  
  208.             UnlockIBase(IntuiLock);
  209.  
  210.             if(Move)
  211.             {
  212.                 if(Window -> WScreen -> LeftEdge > 0)
  213.                 {
  214.                     if(Window -> WScreen -> TopEdge > 0)
  215.                         MoveScreen(Window -> WScreen,-Window -> WScreen -> LeftEdge,-Window -> WScreen -> TopEdge);
  216.                     else
  217.                         MoveScreen(Window -> WScreen,-Window -> WScreen -> LeftEdge,0);
  218.                 }
  219.                 else
  220.                 {
  221.                     if(Window -> WScreen -> TopEdge > 0)
  222.                         MoveScreen(Window -> WScreen,0,-Window -> WScreen -> TopEdge);
  223.                 }
  224.  
  225.                 WindowToFront(Window);
  226.  
  227.                 ScreenToFront(Window -> WScreen);
  228.             }
  229.  
  230.             if(Activate)
  231.                 ActivateWindow(Window);
  232.  
  233.             PushWindow(Window);
  234.  
  235.             return(Window);
  236.         }
  237.  
  238.         LT_DeleteHandle(ASCIIHandle);
  239.  
  240.         ASCIIHandle = NULL;
  241.     }
  242.  
  243.     return(NULL);
  244. }
  245.  
  246. VOID __regargs
  247. DeleteASCIIWindow(struct Window *Window,BYTE WaitForIt)
  248. {
  249.     if(WaitForIt && Window && ASCIIHandle)
  250.     {
  251.         struct IntuiMessage    *Message;
  252.         BOOLEAN             Done = FALSE;
  253.         ULONG             MsgClass,
  254.                      MsgQualifier;
  255.         UWORD             MsgCode;
  256.         struct Gadget        *MsgGadget;
  257.         WORD             i;
  258.  
  259.         for(i = GAD_CHARDELAY ; i <= GAD_SKIP ; i++)
  260.             LT_SetAttributes(ASCIIHandle,i,GA_Disabled,TRUE,TAG_DONE);
  261.  
  262.         do
  263.         {
  264.             if(Wait(PORTMASK(Window -> UserPort) | SIG_BREAK) & SIG_BREAK)
  265.                 break;
  266.  
  267.             while(Message = (struct IntuiMessage *)GT_GetIMsg(Window -> UserPort))
  268.             {
  269.                 MsgClass    = Message -> Class;
  270.                 MsgQualifier    = Message -> Qualifier;
  271.                 MsgCode        = Message -> Code;
  272.                 MsgGadget    = (struct Gadget *)Message -> IAddress;
  273.  
  274.                 GT_ReplyIMsg(Message);
  275.  
  276.                 LT_HandleInput(ASCIIHandle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  277.  
  278.                 if(MsgClass == IDCMP_CLOSEWINDOW || (MsgClass == IDCMP_GADGETUP && MsgGadget -> GadgetID == GAD_ABORT))
  279.                     Done = TRUE;
  280.             }
  281.         }
  282.         while(!Done);
  283.     }
  284.  
  285.     if(Window && ASCIIHandle)
  286.         PopWindow();
  287.  
  288.     if(ASCIIHandle)
  289.     {
  290.         LT_DeleteHandle(ASCIIHandle);
  291.  
  292.         ASCIIHandle = NULL;
  293.     }
  294.  
  295.     if(MessageCount)
  296.     {
  297.         FreeList(&MessageList);
  298.  
  299.         MessageCount = 0;
  300.     }
  301. }
  302.  
  303. VOID __stdargs
  304. AddASCIIMessage(struct Window *Window,STRPTR Message,...)
  305. {
  306.     STATIC UBYTE __far TempBuffer[256];
  307.  
  308.     struct Node    *Node;
  309.     va_list         VarArgs;
  310.  
  311.     va_start(VarArgs,Message);
  312.     VSPrintf(TempBuffer,Message,VarArgs);
  313.     va_end(VarArgs);
  314.  
  315.     if(Node = CreateNode(TempBuffer))
  316.     {
  317.         if(MessageCount == 100)
  318.         {
  319.             FreeVecPooled(RemHead(&MessageList));
  320.  
  321.             MessageCount = 99;
  322.         }
  323.  
  324.         LT_SetAttributes(ASCIIHandle,GAD_INFORMATION,
  325.             GTLV_Labels,~0,
  326.         TAG_DONE);
  327.  
  328.         AddTail(&MessageList,Node);
  329.  
  330.         LT_SetAttributes(ASCIIHandle,GAD_INFORMATION,
  331.             GTLV_Labels,        &MessageList,
  332.             GTLV_Top,        MessageCount,
  333.             GTLV_MakeVisible,    MessageCount,
  334.         TAG_DONE);
  335.  
  336.         MessageCount++;
  337.     }
  338. }
  339.  
  340. VOID __regargs
  341. UpdateASCIIWindow(struct Window *Window,LONG Bytes,LONG MaxBytes,LONG Lines)
  342. {
  343.     if(Bytes != -1)
  344.     {
  345.         UBYTE LocalBuffer[40];
  346.  
  347.         if(MaxBytes)
  348.         {
  349.             LONG Percent = (100 * Bytes) / MaxBytes;
  350.  
  351.             if(Percent > 100)
  352.                 Percent = 100;
  353.  
  354.             if(LocaleBase)
  355.                 SPrintf(LocalBuffer,"%lD (%ld%%)",Bytes,Percent);
  356.             else
  357.                 SPrintf(LocalBuffer,"%ld (%ld%%)",Bytes,Percent);
  358.         }
  359.         else
  360.             SPrintf(LocalBuffer,ConvNumber,Bytes);
  361.  
  362.         LT_SetAttributes(ASCIIHandle,GAD_BYTES,
  363.             LABX_Index,    0,
  364.             LABX_Text,    LocalBuffer,
  365.         TAG_DONE);
  366.     }
  367.  
  368.     if(Lines != -1)
  369.     {
  370.         UBYTE LocalBuffer[40];
  371.  
  372.         SPrintf(LocalBuffer,ConvNumber,Lines);
  373.  
  374.         LT_SetAttributes(ASCIIHandle,GAD_BYTES,
  375.             LABX_Index,    1,
  376.             LABX_Text,    LocalBuffer,
  377.         TAG_DONE);
  378.     }
  379. }
  380.  
  381. BYTE __regargs
  382. HandleASCIIWindow(struct Window *Window)
  383. {
  384.     struct IntuiMessage    *Message;
  385.     ULONG             MsgClass,
  386.                  MsgQualifier;
  387.     UWORD             MsgCode;
  388.     struct Gadget        *MsgGadget;
  389.  
  390.     while(Message = (struct IntuiMessage *)GT_GetIMsg(Window -> UserPort))
  391.     {
  392.         MsgClass    = Message -> Class;
  393.         MsgQualifier    = Message -> Qualifier;
  394.         MsgCode        = Message -> Code;
  395.         MsgGadget    = (struct Gadget *)Message -> IAddress;
  396.  
  397.         GT_ReplyIMsg(Message);
  398.  
  399.         LT_HandleInput(ASCIIHandle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  400.  
  401.         if(MsgClass == IDCMP_CLOSEWINDOW)
  402.             return(1);
  403.  
  404.         if(MsgClass == IDCMP_MOUSEMOVE)
  405.         {
  406.             SendSetup();
  407.  
  408.             ConfigChanged = TRUE;
  409.         }
  410.  
  411.         if(MsgClass == IDCMP_GADGETUP)
  412.         {
  413.             switch(MsgGadget -> GadgetID)
  414.             {
  415.                 case GAD_PACING:
  416.                 case GAD_CHARDELAY:
  417.                 case GAD_LINEDELAY:
  418.  
  419.                     ASCIISendSetup();
  420.  
  421.                     ConfigChanged = TRUE;
  422.  
  423.                     break;
  424.  
  425.                 case GAD_QUIET_TRANSFER:
  426.  
  427.                     ConfigChanged = TRUE;
  428.  
  429.                     break;
  430.  
  431.                 case GAD_ABORT:
  432.  
  433.                     return(1);
  434.  
  435.                 case GAD_SKIP:
  436.  
  437.                     return(2);
  438.             }
  439.         }
  440.     }
  441.  
  442.     return(0);
  443. }
  444.